// ArmorDetectorCameraApp.cpp
#include <opencv2/opencv.hpp>
#include "armor_detector/armor_detector.hpp"
#include <iostream>

int main() {
    // 设置检测器的参数
    int binary_threshold = 245; // 根据需要调整二值化阈值
    fyt::auto_aim::EnemyColor enemy_color = fyt::auto_aim::EnemyColor::BLUE;
    fyt::auto_aim::Detector::LightParams light_params{ 0.1,0.4,40,60};/* min_ratio，min_ratio，max_angle，color_diff_thresh */
    fyt::auto_aim::Detector::ArmorParams armor_params{0.6,0.8,3.2,3.2,5.0,3};/* min_light_ratio，max_small_center_distance，max_large_center_distance */ 
    // 创建检测器对象
    fyt::auto_aim::Detector detector(binary_threshold, enemy_color, light_params, armor_params);
    // 打开相机
    cv::VideoCapture cap(0); // 0 表示默认相机，修改此值可以选择不同的相机
    if (!cap.isOpened()) {
        std::cerr << "无法打开相机！" << std::endl;
        return -1;
    }

    cv::Mat frame;
    while (true) {
        // 读取相机帧
        cap >> frame;
        if (frame.empty()) {
            std::cerr << "无法从相机读取帧！" << std::endl;
            break;
        }

        // 调用检测方法
        auto armors = detector.detect(frame);

        // 绘制检测结果
        detector.drawResults(frame);
        

        // // 打印检测到的装甲信息
        // for (const auto &armor : detected_armors) {
        //     std::cout << "Armor Type: " << fyt::auto_aim::armorTypeToString(armor.type) 
        //               << ", Classification: " << armor.classfication_result << std::endl;
        // }
        // 按下 'q' 键退出循环
        if (cv::waitKey(1) == 'q') {
            break;
        }
    }
    // 释放相机资源
    cap.release();
    cv::destroyAllWindows();
    return 0;
}
